#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
#define maxn 50200
/*-----------------------------------最大流dinic模板---------------------------------------*/
#define Maxv 50200//10000K最大就能开到这个数.
#define Maxe 1000000
#define inf 0x7fffffff
int E[Maxe],Ef[Maxe],next[Maxe],C[Maxe],M;
int first[Maxv],L[Maxv],Q[Maxv],N;
int S,T;//一定要小心S,T不要在main里面再次申明
int vec;//要每次初始化的点
void __insert(int a,int b ,int c)
{
    M++;
    C[M]=c;
    E[M]=b;
    Ef[M]= a;
    next[M]=first[a];
    first[a]=M;
}

void insert(int a,int b,int c)
{
    __insert(a,b,c);
    __insert(b,a,0);//反边为0，特别注意容易敲错
}
bool bfs()
{
    int h,t,e,u,v,i;
    h=t=0;
    Q[t++]=S;
  	for(i=0; i<=vec; i++)
  		L[i] =0;

    L[S]=1;
    while(h<t)
    {
        u=Q[h++];
        for(e=first[u]; e!=-1; e=next[e])
        {
            v=E[e];
            if(L[v]==0 && C[e]>0)
            {
                L[v]=L[u]+1;
                Q[t++]=v;
            }
        }
    }
    return L[T];
}

int dfs(int u,int  f)//这个地方增广应该不会超int 界
{
	if( u == T)	return f;
	int t,e,v, w = 0;
	for(e = first[u]; e!=-1 && w<f; e=next[e])
	{
		v = E[e];
		if(C[e]>0 && L[v] == L[u] + 1)
		{
			if(t = dfs(E[e], min(C[e],f-w)))//t  要赋值
			{
				C[e] -= t;
				C[e^1] += t;
				w += t;
			}
		}
	} 
	if(!w) L[u] = -1;
	return w;
}
int dinic()
{
	int f=0, now;
	while(bfs())
	{
		now = dfs(S,inf);
		f = f + now;
	}
	return f;
}

void init(int all,int a,int b)
{
      M=-1;
      vec=all;
      S=a;T=b;
      for(int i=0; i<=vec; i++)
      	first[i] =-1;
}
/*------------最大流dinic模板--------------------*/
int n,m;
int a[maxn],b[maxn];
int main()	
{
	int i,j,k;
	while(scanf("%d%d", &n,&m)!=EOF)
	{
		int x,y;
/*------------最大流dinic模板-----------------------*/
		init(n+4,0,n+2);
/*------------最大流dinic模板----------------*/

		for(i=1; i<=n; i++)
		{
			scanf("%d%d",&x,&y);
/*------------最大流dinic模板----------------*/
			insert(S,i,x);
			insert(i,T,y);
/*------------最大流dinic模板----------------*/
		}
		int z;
		for(i=0; i<m;i++)
		{
			scanf("%d%d%d", &x,&y, &z);
			insert(x,y,z);
			insert(y,x,z);
		}
		int ans=dinic();
		printf("%d\n",ans);
	}
}
